package com.atom.module.coroutine.core

import kotlin.coroutines.CoroutineContext
// 实现了 协程的上下文换的 接口
interface Job : CoroutineContext.Element {

    companion object Key : CoroutineContext.Key<Job>

    override val key: CoroutineContext.Key<*>
        get() = Key

    // 判断是否 活动的
    val isActive: Boolean

    // 执行取消
    fun invokeOnCancel(onCancel: OnCancel): Disposable

    // 执行完成
    fun invokeOnCompletion(onComplete: OnComplete): Disposable

    // 取消操作
    fun cancel()

    // 移除操作
    fun remove(disposable: Disposable)

    // 链接到子环境  子Job
    fun attachChild(child: Job): Disposable

    // 加入 , 是个可挂起的函数
    suspend fun join()
}